package DAO;

import AccesoBD.AccesoBaseDatos;
import Dominio.Asignatura;
import Dominio.Profesor;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DAOAsignatura {
    private Connection conexion = null;
    private static final String TABLA_ASIGNATURA = "asignaturas";
    private static final String COLUMNA_NOMBRE = "nombre";
    private static final String COLUMNA_CLAVE_ASIGNATURA = "clave_asignatura";
    private AccesoBaseDatos acceso = new AccesoBaseDatos();
    
    public DAOAsignatura(){
        this.conexion = this.acceso.abrirConexion();
    }
    
    public boolean existeAsignatura(Asignatura asignatura){
        try{
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String querySearch = "SELECT * FROM "+ TABLA_ASIGNATURA + " WHERE " + COLUMNA_NOMBRE +
                    " ='"+asignatura.getNombre()+"' ";
            ResultSet resultado = sentencia.executeQuery(querySearch);
            System.out.println(resultado.getRow());
            int contadorDeRegistros = 0;
            while (resultado.next()) {
                contadorDeRegistros++;
            }

            if (contadorDeRegistros != 0) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DAOAsignatura.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
    
    public void registrarAsignatura(Asignatura asignatura){
        if(!this.existeAsignatura(asignatura)){
            try {
                String nombreAsignatura = asignatura.getNombre();

                Statement sentencia = acceso.crearSentenciaBD(conexion);
                String queryInsertar = "INSERT INTO " + TABLA_ASIGNATURA + " (" + COLUMNA_NOMBRE + ") VALUES ('" +nombreAsignatura+ "')";
                sentencia.executeUpdate(queryInsertar);
            } catch (SQLException ex) {
                System.out.println("Ocurrió un problema al tratar de registrar la asignatura");
            }
        }else{
            System.out.println("Ya existe la asignatura que intenta registrar.");
        }
    }
    
    protected Asignatura registraAsignatura(Asignatura asignatura){
        if(existeAsignatura(asignatura)){
            return buscaAsignatura(asignatura);
        }else{
            registrarAsignatura(asignatura);
            return buscaAsignatura(asignatura);        
        }        
    }
    
    public void cerrarConexionAAsignatura(){
        acceso.cerrarConexion(conexion);
    }
    public Asignatura buscaAsignatura(Asignatura asignatura){
        String nombre = asignatura.getNombre().toUpperCase();
        if(this.existeAsignatura(asignatura)){
            try{
                Statement sentencia = acceso.crearSentenciaBD(conexion);
                String queryBuscaUno = "SELECT * FROM "+TABLA_ASIGNATURA+" WHERE "+COLUMNA_NOMBRE+"= '"+nombre+"'";
                ResultSet resultado = sentencia.executeQuery(queryBuscaUno);
                if(resultado.next()){
                    resultado.first();
                    String nombreBD = resultado.getObject(2).toString().toUpperCase();
                    int clave = resultado.getInt(1);
                    return new Asignatura(clave,nombreBD);
                }else{
                    return null;
                }
            }catch(SQLException ex){
                System.out.println("Problemas de SQL:\n"+ex.toString());
            }
        }
        return null;
    }
    
    public ArrayList<Asignatura> buscarTodasLasAsignaturas(){
        String queryBusqueda = "SELECT * FROM "+TABLA_ASIGNATURA;
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            ResultSet resultado = sentencia.executeQuery(queryBusqueda);
            resultado.last();
            int resultSetSize = resultado.getRow();
            if(resultSetSize > 0){
                ArrayList<Asignatura> asignaturas = new ArrayList<Asignatura>();
                resultado.first();
                while(resultado.getRow() != 0){//Mientras no se llegue a la ultima linea
                    Asignatura actual = new Asignatura("");
                    actual.setClave_asignatura(resultado.getInt(1));
                    actual.setNombre(resultado.getString(2));
                    asignaturas.add(actual);
                    resultado.next();
                }
                resultado.close();
                return asignaturas;
            }else{
                return null;
            }
        } catch (SQLException ex) {
            System.err.println("Problemas de SQL:\n"+ex.toString());
            return null;
        }
    }
    
    public Asignatura buscarAsignatura(int claveAsignatura){
        String queryBusqueda = "SELECT * FROM "+TABLA_ASIGNATURA+ " WHERE " + COLUMNA_CLAVE_ASIGNATURA + " = " + claveAsignatura;
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            ResultSet resultado = sentencia.executeQuery(queryBusqueda);
            resultado.first();
            if(resultado.getRow() != 0){
                Asignatura asignatura = new Asignatura();
                asignatura.setClave_asignatura(resultado.getInt(1));
                asignatura.setNombre(resultado.getString(2));
                return asignatura;
            } else {
                return null;
            }
        } catch (SQLException ex) {
            System.err.println("Problemas de SQL:\n"+ex.toString());
            return null;
        }
    }
    
    public Asignatura buscaAsignatura(String nombre){                
            try{
                Statement sentencia = acceso.crearSentenciaBD(conexion);
                String queryBuscaUno = "SELECT * FROM "+TABLA_ASIGNATURA+" WHERE "+COLUMNA_NOMBRE+"= '"+nombre+"'";
                ResultSet resultado = sentencia.executeQuery(queryBuscaUno);
                if(resultado.next()){
                    resultado.first();
                    String nombreBD = resultado.getObject(2).toString().toUpperCase();
                    int clave = resultado.getInt(1);
                    return new Asignatura(clave,nombreBD);
                }else{
                    return null;
                }
            }catch(SQLException ex){
                System.out.println("Problemas de SQL:\n"+ex.toString());
            }        
        return null;
    }
}
